]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
loginDialog: Catch possible errors when session is opened
authorAlessandro Bono <alessandro.bono369@gmail.com>
Mon, 19 Aug 2024 09:47:45 +0000 (11:47 +0200)
committerAlessandro Bono <alessandro.bono369@gmail.com>
Tue, 20 Aug 2024 10:38:41 +0000 (12:38 +0200)
Since commit df84854d9073c457d79d7c2e6a5750428c52ff01 the function
_onSessionOpened() is now async. This means that if an error occurs
we get the following warning:
```
gnome-shell[1014]: Unhandled promise rejection. To suppress this
warning, add an error handler to your promise chain with .catch()
or a try-catch block around your await expression. Stack trace of
the failed promise:
_onSessionOpened@resource:///org/gnome/shell/gdm/loginDialog.js:1166:27 @resource:///org/gnome/shell/ui/init.js:21:20
```

Follow the suggestion and add a try-catch block in order to reveal
what the error is. In the catch phase, reset the faded AuthPrompt
otherwise we can't retry with another user.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3448>

js/gdm/loginDialog.js

index e1153727d8c0da9b132a0e21b1b932ede0944a2f..db83f4621c3243eff9bf252aa024b8d32f8daa21 100644 (file)
@@ -1163,15 +1163,20 @@ export const LoginDialog = GObject.registerClass({
     }
 
     async _onSessionOpened(client, serviceName, sessionId) {
-        if (sessionId) {
-            const conflictingSession = await this._findConflictingSession(sessionId);
-            if (conflictingSession) {
-                this._showConflictingSessionDialog(serviceName, conflictingSession);
-                return;
+        try {
+            if (sessionId) {
+                const conflictingSession = await this._findConflictingSession(sessionId);
+                if (conflictingSession) {
+                    this._showConflictingSessionDialog(serviceName, conflictingSession);
+                    return;
+                }
             }
-        }
 
-        this._authPrompt.finish(() => this._startSession(serviceName));
+            this._authPrompt.finish(() => this._startSession(serviceName));
+        } catch (error) {
+            logError(error, `Failed to start session '${sessionId}'`);
+            this._authPrompt.reset();
+        }
     }
 
     _waitForItemForUser(userName) {